(function(){
    class Person {
        // public ： 公有的属性，所有的地方都可以访问
        // private ： 类私人的属性， 只能在类中能读取到值
        // protected ： 受保护的，只有当前类和当前类的子类中才能访问
        private name : string;
        private age : number;
        constructor(name: string,age:number) {
            this.name = name;
            this.age = age;
        }
        // 存取器
        get _name(){
            console.log('获取名字')
            return this.name;
        }
        set _name(name: string){
            console.log('设置名字')
            this.name = name;
        }
        get _age(){
            return this.age
        }
        set _age(age: number){
            if(age>0){
                this.age = age;
            }
        }
    }   
    let person = new Person('张三',12);
    console.log(person._name);
    person._name = '李四';
    console.log(person._name);
    console.log(person._age);
    person._age = 15;
    console.log(person._age);


    class A {
        protected num : number
        constructor(num: number) {
            this.num = num
        }
    }
    class B extends A {
        test(){
            console.log(this.num)
        }
    }
    let c = new B(123)
    c.test()


    // 集属性声明和 赋值 于一体的语法糖
    class C {
        // 属性声明和 赋值 于一体的语法糖
        constructor(public name: string, public age: number){
            // 这里就默认 this.name = name ; this.age = age 了
        }
    }
    let c1 = new C('张三',12)
    console.log(c1.name)
    console.log(c1.age)
   
})()